/************************************************************************

								Heroes IV
					  Copyright 2000, The 3DO Company

	------------------------------------------------------------------
  							 script_simple_action.h

	$Header: /heroes4/script_simple_action.h $

	$NoKeywords: $

 ************************************************************************/

#if !defined( SCRIPT_SIMPLE_ACTION_H_INCLUDED )
#define SCRIPT_SIMPLE_ACTION_H_INCLUDED

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <iosfwd>

#include "abstract_script_action.h"

// --------------------------------------------------------------------------
// t_script_simple_action class
// --------------------------------------------------------------------------

class t_script_simple_action : public t_abstract_script_action
{
public:
	// Member functions
	virtual bool	read( std::streambuf& stream, int version );
	virtual bool	read_from_map(
						std::streambuf &	stream,
						int					format_version );
	virtual bool	write( std::streambuf& stream ) const;
};

class t_script_remove : public t_script_simple_action
{
public:
	virtual void execute(t_script_context_hero const& context) const;
	virtual void execute(t_script_context_town const& context) const;
	virtual void execute(t_script_context_object const& context) const;
	virtual void execute(t_script_context_army const& context) const;
	virtual void execute(t_script_context_global const& context) const;
};

class t_script_no_op : public t_script_simple_action
{
};

class t_script_remove_this_adv_object : public t_script_simple_action
{
public:
	virtual void execute(t_script_context_hero const& context) const;
	virtual void execute(t_script_context_town const& context) const;
	virtual void execute(t_script_context_object const& context) const;
	virtual void execute(t_script_context_army const& context) const;
	virtual void execute(t_script_context_global const& context) const;
};

SPECIALIZE_SCRIPT_ACTION( k_script_action_no_op, t_script_no_op );
SPECIALIZE_SCRIPT_ACTION( k_script_action_remove_script, t_script_remove );
SPECIALIZE_SCRIPT_ACTION( k_script_action_remove_this_adv_object, t_script_remove_this_adv_object );

#endif // !defined( SCRIPT_SIMPLE_ACTION_H_INCLUDED )
